import axios from 'axios';
import cache from "@/utls/cache.js";
import { tansParams } from "@/utls/coomm.js";

// 创建axios实例
const service = axios.create({
    baseURL: import.meta.env.VITE_API_BASE_URL, // 使用环境变量
    timeout: 30000 // 设置请求超时时间为 30 秒
});

function isDuplicateRequest(requestObj, sessionObj, interval) {
    return (
        sessionObj &&
        sessionObj.url === requestObj.url &&
        sessionObj.data === requestObj.data &&
        requestObj.time - sessionObj.time < interval
    );
}

function createRequestObj(url, data) {
    return {
        url: url,
        data: typeof data === 'object' ? JSON.stringify(data) : data,
        time: new Date().getTime()
    };
}

// 请求拦截器
service.interceptors.request.use(
    config => {
        if (config.method === 'get' && config.params) {
            let url = config.url + '?' + tansParams(config.params);
            url = url.slice(0, -1);
            config.params = {};
            config.url = url;
        }

        if (config.method === 'post' || config.method === 'put') {
            const requestObj = createRequestObj(config.url, config.data);
            const sessionObj = cache.session.getJSON('sessionObj');
            const interval = 1000; // 间隔时间(ms)，小于此时间视为重复提交

            if (isDuplicateRequest(requestObj, sessionObj, interval)) {
                const message = '数据正在处理，请勿重复提交';
                console.warn(`[${requestObj.url}]: ` + message);
                return Promise.reject(new Error(message));
            } else {
                cache.session.setJSON('sessionObj', requestObj);
            }
        }

        return config;
    },
    error => {
        console.error('请求错误:', error);
        return Promise.reject(error);
    }
);
// 响应拦截器
service.interceptors.response.use(
        // 在这里可以对响应数据进行处理


)


// 导出实例和工具函数
export default service;
